#pragma once
#ifndef TSTRING_H_
#define TSTRING_H_
#include <string>

class TString 
{
public:
	TString();
	~TString(){}
	TString(const char* str);
	TString(const wchar_t* str);
	TString(std::string str);
	TString(std::wstring str2);
	std::string GetString();
	std::wstring GetWString();
#if _UNICODE
	const wchar_t* data();
#else
	const char* data();
#endif
	const wchar_t* wstrdata();
	const char* strdata();
	void operator =(const char* str);
	void operator =(const wchar_t* wstr);
	void operator =(std::string str);
	void operator =(std::wstring wstr);
	TString operator + (std::string data);
	TString operator + (std::wstring data);
	TString operator +=(std::string data);
	TString operator +=(std::wstring data);
	size_t size();
	void push_back(wchar_t ch) { wstr_data.push_back(ch); }
private:
	std::wstring wstr_data;

};

//RegisterBlueprintClass(TString)

//class TString
//{
//public:
//	TString()
//	{
//
//	}
//	TString(const char* str)
//	{
//		wstr_data = Utility::ConvertToWstring(str);
//	}
//	TString(const wchar_t* str)
//	{
//		wstr_data = str;
//	}
//
//	std::string GetString()
//	{
//		return Utility::ConvertTostring(wstr_data);
//	}
//	std::string GetWString()
//	{
//		return Utility::ConvertTostring(wstr_data);
//	}
//	const wchar_t* wstrdata()
//	{
//		return wstr_data.data();
//	}
//	const char* strdata()
//	{
//		return Utility::ConvertTostring(wstr_data).data();
//	}
//
//	void operator =(const char* str)
//	{
//		wstr_data = Utility::ConvertToWstring(str);
//	}
//	void operator =(const char* wstr)
//	{
//		wstr_data = Utility::ConvertToWstring(wstr);
//	}
//
//	TString operator +(const char* wstr)
//	{
//		TString tstr;
//		tstr.wstr_data = wstr_data + Utility::ConvertToWstring(wstr);
//		return	tstr;
//	}
//	TString operator +(std::wstring data)
//	{
//		TString tstr;
//		tstr.wstr_data = wstr_data + data;
//		return tstr;
//	}
//	TString operator +=(std::wstring data)
//	{
//		wstr_data += data;
//		return *this;
//	}
//private:
//	std::wstring wstr_data;
//
//};

#define tstring TString
#endif
